import re
from LAC import LAC
from ddparser import DDParser
import pkuseg
from utils import read_txt,cut_sent



'''
2022.6.17
确定句子主语是否为处所词
分析存现句的句法结构：
    主[处所词]||动+“着/了”+宾[存在的事物]
    主[处所词]||动+“了/趋向补语/结果补语”+宾[出现、消失的事物]
    主[处所词]||“是、有”+名
    句型：处所词/时间词（前段）+动词（中段）+名词（后断）
    前段：名词、名词+方位词、方位词、介宾短语、动宾短语    f,n+f,s,n+s,TIME,p+n,p+s,v+n,v+s
    中段：有、是、v+有、v+是、v+着/了                  有、是、v+有、v+是、v+着/了
    后段：名词、数量词+名词                            n,q+n

'''

ddp = DDParser()
pkuseg = pkuseg.pkuseg()
lac = LAC()

def find_double_f(fenci_res):
    # type_lst：n+f,n+s,p+宾语,v+宾语
    noun_lst = ['n', 'f', 's', 't', 'nr', 'ns', 'nt', 'nw', 'nz', 'r']
    fpos = -1       # 无处所词

    for i in range(len(fenci_res) - 1):
        if (fenci_res[i] == 'n' and (fenci_res[i + 1] == 'f' or fenci_res[i + 1] == 's')) or (fenci_res[i] == 'p') and (fenci_res[i + 1] == 'n' or re.findall(fenci_res[i + 1], ','.join(noun_lst))):
            # if (fenci_res[i] == 'n' and (fenci_res[i + 1] == 'f' or fenci_res[i + 1] == 's')) or (
            #         fenci_res[i] == 'p' or fenci_res[i] == 'v') and (
            #         fenci_res[i + 1] == 'n' or re.findall(fenci_res[i + 1], ','.join(noun_lst))):

            fpos = i + 1
            return fpos # 找到最前面的一组疑似处所词类型，后面的就不看了
    return fpos

def find_chusuoci(sent):
    # 判断单个句子sent中是否含有处所词
    fenci_res, pos_res, ddpres = cut_sent(sent)

    #print("pos", pos_res)
    #print("word", fenci_res)
    fpos = find_double_f(pos_res)    # 首先判断是否存在多个词组成处所词的情形

    #print("judge_double_f之后", fpos)

    for i in range(len(pos_res)):
        if pos_res[i] == 'f' or pos_res[i] == 's' or pos_res[i] == 'TIME' and fpos == -1:
            fpos = i
            return fpos

    # print("单触发词之后", fpos)
    # if fpos > -1:
    #     print("含有处所词类型，可能是存现句")
    # else:
    #     print("不含处所词类型，不是存现句")
    return fpos


if __name__ == '__main__':

    text = "由基道边走上两个人。进到院内是一排一排的房子。明信片背后盖着鸟巢的风景邮票。山上有座庙。山上净是石头。明信片背后盖着鸟巢的风景邮票。" \
           "山顶覆盖着白雪。台上坐着主席团。刚才天空中飞着一只老鹰。屋顶上飘着五星红旗。烟囱里冒出一阵阵浓浓的黑烟。他的脸上透出一丝笑意。" \
           "小溪边顿时没有了女人的踪迹。昨天村里死了两头牛。影壁前放着一口大鱼缸。两边摆着两盆石榴树。末班车上挤满了人。大树底下蹲着一个老头儿。" \
           "老王家生了一个胖小子。客厅里走出来一位穿西服的老先生。胡同里搬走了两户人家。昨天到了学校"
    # text = '河里漂着两只船。前面来了两个客人。听说去年来了个小伙子。中间圆桌旁边，孤零零地立着一个圆凳。上周到了一批货，现在就放在港口。江边搬走了好几个工厂。路西边是一片草地。去年发生了几件大事。这里有一本新书。屋子右面放一张木床，铺着单薄的旧床单,堆叠着棉被。依门倒贴一个红“福”字，说是“福倒(到)了”的意思。近床有一张破旧的梳妆台，上面放一只破脸盆。床下横七竖八有几双花鞋,床前搁把椅子。'
    print(find_chusuoci("这包肉丸子你拿回去熬白菜"))
    sent = '客厅里走出来一位穿西服的老先生'
    sents = read_txt('./cunxianju.txt')
    for s in sents:
        fpos = find_chusuoci(s)
        print(fpos)